ARD2  1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
MailDelivery.h
Go to the documentation of this file.
00001 
00018 #ifndef MAILDELIVERY_H_
00019 #define MAILDELIVERY_H_
00020 /*
00021  **************************************************************
00022  * Defines, Macros and Typedefs 
00023  **************************************************************/
00024 /*** Constant Macros ***/
00025 /* Default Yes and No defines */
00026 #ifndef TRUE
00027 #define TRUE (1u)
00028 #endif
00029 #ifndef CLEAR
00030 #define CLEAR (0u)
00031 #endif
00032 #ifndef BITS_IN_NIBBLE
00033 #define BITS_IN_NIBBLE (4u)
00034 #endif
00035 #ifndef BITS_IN_BYTE
00036 #define BITS_IN_BYTE (8u)
00037 #endif
00038 #ifndef BITS_IN_32
00039 #define BITS_IN_32  (32u)
00040 #endif
00041 #ifndef BITS_IN_16
00042 #define BITS_IN_16  (16u)
00043 #endif
00044 #ifndef BYTES_IN_32
00045 #define BYTES_IN_32  (4u)
00046 #endif
00047 #ifndef BYTES_IN_16
00048 #define BYTES_IN_16  (2u)
00049 #endif
00050 
00051 /* Mail DMAs */
00052 #define MAILDELIVERY_OUTBOX1_DMA_CH (0x0Eu)
00053 #define MAILDELIVERY_OUTBOX2_DMA_CH (0x0Fu)
00054 #define MAILDELIVERY_INBOX1_DMA_CH  (0x0Cu)
00055 #define MAILDELIVERY_INBOX2_DMA_CH  (0x0Du)
00056 
00057 #define MAILDELIVERY_INBOX1_DMA_INDEX_START   (0u)
00058 #define MAILDELIVERY_INBOX1_DMA_INDEX_END     (INBOX_MAX_BUFFER_CNT - 1)
00059 #define MAILDELIVERY_INBOX2_DMA_INDEX_START   (INBOX_MAX_BUFFER_CNT)
00060 #define MAILDELIVERY_INBOX2_DMA_INDEX_END     ((INBOX_MAX_BUFFER_CNT * 2u) - 1u)
00061 
00062 /* Maximum number of messages */
00063 #define OUTBOX_MAX_BUFFER_CNT (48u)
00064 #define INBOX_MAX_BUFFER_CNT  (48u)
00065 
00066 /* Permissions */
00067 #define MAILBOX_WRITING_ALLOWED    (0xA0u)
00068 #define MAILBOX_WRITING_PROHIBITED (0x0Au)
00069 
00070 /* Define contents of mailboxes according to position */
00071 #define OUTBOX_ACTIVE_OUTBOX_IS_1 (0u)
00072 #define OUTBOX_ACTIVE_OUTBOX_IS_2 (OUTBOX_MAX_BUFFER_CNT + 1u)
00073 #define MAILBOX_ACTIVE_INBOX_IS_1  (-1)
00074 #define MAILBOX_ACTIVE_INBOX_IS_2 (-2)
00075 #define MAILBOX_NO_PREVIOUS_INBOX (0u)
00076 
00077 /* Define error codes */
00078 #define MAILBOX_CAPACITY_HAS_BEEN_REACHED (0x20u)
00079 #define MAILBOX_IS_BEING_WRITTEN          (0x10u)
00080 
00081 /*** Function Macros ***/
00082 /* This macro is here to replace vfnMailDeliveryTriggerOutbox
00083 #define TRIGGER_OUTBOX(XX, YY) vfnDMAMUXInit(XX, DMA_SOURCE_DSPI0_TX, CLEAR, YY)
00084 /*** Enums ***/
00085 
00086 /*** TypeDefs ***/
00087 
00088 /*
00089  **************************************************************
00090  * Declarations 
00091  **************************************************************/
00092 /*** Constants ***/
00093 
00094 /*** Globals ***/
00095 extern vuint32_t gau32DSPIOutbox[(OUTBOX_MAX_BUFFER_CNT + 1u) * 2u];
00096 extern vuint16_t gau16DSPIInbox[OUTBOX_MAX_BUFFER_CNT + 1u];
00097 extern vuint8_t gu8MailboxActiveOutboxOffset;
00098 extern vuint8_t gu8InboxDMA;
00099 extern vuint8_t gu8InactiveInboxDMA;
00100 extern vuint8_t gu8OutboxDMA;
00101 extern vuint8_t gu8InactiveOutboxDMA;
00102 /*
00103  **************************************************************
00104  * Function Prototypes 
00105  **************************************************************/
00106 /*
00107  ******************************************************************************
00108  *
00109  * Function:          u8fnMailDeliveryOfOutboxInit()
00110  *
00111  */
00124 uint8_t u8fnMailDeliveryOfOutboxInit(uint32_t* pu32Outbox, 
00125                                      uint32_t* pu32Output,
00126                                      uint8_t u8DMAChannel);
00127 /*
00128  ******************************************************************************
00129  *
00130  * Function:          u8fnMailDeliveryToInboxInit()
00131  *
00132  */
00144 uint8_t u8fnMailDeliveryToInboxInit(uint16_t* pu16Input);
00145 /*
00146  ******************************************************************************
00147  *
00148  * Function:          vfnMailboxInit()
00149  *
00150  */
00157 void vfnMailboxInit(void);
00158 /*
00159  ******************************************************************************
00160  *
00161  * Function:          u8fnMailboxAppendToDSPIOutbox()
00162  *
00163  */
00185 uint8_t u8fnMailboxAppendToDSPIOutbox(uint8_t u8DSPIInstance, uint8_t u8CS,
00186                                       uint8_t u8ContCS,
00187                                       uint8_t u8EndOfQueueFlag,
00188                                       uint16_t* pu16Msg, uint16_t u16Size);
00189 /*
00190  ******************************************************************************
00191  *
00192  * Function:          u8fnMailboxAppendToCompositeDSPIOutbox()
00193  *
00194  */
00217 uint8_t u8fnMailboxAppendToCompositeDSPIOutbox(uint8_t u8DSPIInstance1,
00218                                                uint8_t u8DSPIInstance2, 
00219                                                uint8_t u8CS,
00220                                                uint16_t* pu16Msg1, 
00221                                                uint16_t* pu16Msg2,
00222                                                uint16_t u16SizeAtOrigin);
00223 /*
00224  ******************************************************************************
00225  *
00226  * Function:          u8fnMailboxAppendToOutbox()
00227  *
00228  */
00240 uint8_t u8fnMailboxAppendToOutbox(uint32_t* pu32Mailbox, uint32_t u32Message);
00241 /*
00242  ******************************************************************************
00243  *
00244  * Function:          u8fnMailboxAppendToInbox()
00245  *
00246  */
00255 uint8_t u8fnMailboxAppendToInbox(const uint16_t* pu16MsgResponse,
00256                                  uint16_t u16Size);
00257 /*
00258  ******************************************************************************
00259  *
00260  * Function:          vfnMailboxSwitchActiveMailboxes()
00261  *
00262  */
00269 void vfnMailboxSwitchActiveMailboxes(void);
00270 /*
00271  ******************************************************************************
00272  *
00273  * Function:          vfnMailDeliveryTriggerOutbox()
00274  *
00275  */
00285 void vfnMailDeliveryTriggerOutbox(uint8_t u8DMAMuxChannel, uint8_t u8Enable);
00286 #endif /* MAILDELIVERY_H_ */